#pragma once

#include"Command.hpp"
#include<iostream>
#include<unistd.h>
#include<cstdio>
#include<sys/types.h>
#include<signal.h>
#include <sys/stat.h>
#include <fcntl.h>

const std::string dev="/dev/null";
//守护进程化
void Daemon(int nochdir=0,int noclose=0)
{
    //忽略信号，IO
    //父进程直接结束
    if(fork()>0)
    {
        exit(0);
    }
    //成为新会话
    setsid();
    //可能和键盘显示器，stdin，stdout，stderr相关联
    //打开 /dev/null 这个文件 ，重定向标准输入输出err到这个文件
    if(nochdir==0)
    {
        ::chdir("/");
    }
    if(noclose==0)
    {
         int fd=::open(dev.c_str(),O_RDWR);
    if(fd<0)
    {
        std::cout<<"打开/dev/null失败，守护进程失败"<<std::endl;
        exit(OPEN_ERR);
    }
    else
    {
        dup2(fd,0);
        dup2(fd,1);
        dup2(fd,2);
        close(fd);
    }
    }
   
    
};